//
//  statusPictureView.swift
//  我的微博
//
//  Created by 杨庆 on 15/10/26.
//  Copyright © 2015年 双元班. All rights reserved.
//

import UIKit
//可重用cell 的标识符
private let statusPictureViewCellID = "statusPictureViewCellID"
class statusPictureView: UICollectionView {
    /// 继续的是要求调用最重要的status的数据
    var statuses: status?{
        didSet{
            sizeToFit()
            reloadData()
        }
    }
    override func sizeThatFits(size: CGSize) -> CGSize {
        return calcViewSize()
    }
    /// 计算视图的大小
    private func calcViewSize() ->CGSize {
        //0.准备常量
        let itemSize = CGSize(width: 90, height: 90)
        let margin: CGFloat = 10
        //1.每一行最多显示的数量
        let rowCount = 3
        pictureLayout.itemSize = itemSize
        //2.根据图片的数量计算视图的大小
        let count = statuses?.pictureURLs?.count ?? 0
        //2.1 没有图片
        if count == 0 {
            return CGSizeZero
        }
        //2.2 有1张图片
        if count == 1 {
            let size = CGSize(width: 150, height: 120)
            pictureLayout.itemSize = size
            return size
        }
        //2.3 有4张图片 2*2
        if count == 4 {
            let w = itemSize.width * 2 + margin
            return CGSize(width: w, height: w)
        }
        //2.4 其他情况
        /**
            2,3 --> 对应的1 行
            5,6 --> 对应的2 行
            7,8,9 ->对应的3 行
        */
        //计算行高
        let row = (count - 1)/(rowCount + 1)
        let w   = itemSize.width * CGFloat(rowCount) + margin * CGFloat(rowCount - 1)
        let h   = itemSize.height * CGFloat(row) + margin * CGFloat(row - 1)
        return CGSize(width: w, height: h)
    }
    
    /// 图片的布局的方法
    private let pictureLayout = UICollectionViewFlowLayout()
    /// collectionview 的初始化的构造函数
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        //提示一下 :调用父类的构造函数之前,必须给本类的属性来进行初始化.就是要进行的flow的layout 的布局
        super.init(frame: frame, collectionViewLayout:
            pictureLayout)
        //注册可重用的cell
        registerClass(statusPictureViewCell.self , forCellWithReuseIdentifier: "statusPictureViewCellID")
        backgroundColor = UIColor.lightGrayColor()
        //设置代理,让自己成为代理,实现数据源
        //在开发的时候,如果有局部的小视图的话,可以自己充当自己的代理
        self.dataSource = self
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
// 在swift 中 ,协议同样可以通过 extension 来写,可以将一组的协议的方法放在一起,便于代码的维护和 管理
extension statusPictureView: UICollectionViewDataSource{
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return statuses?.pictureURLs?.count ?? 0
    }
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("statusPictureViewCellID", forIndexPath: indexPath) as! statusPictureViewCell
        cell.imageURL = statuses!.pictureURLs![indexPath.item]
//        cell.imageURL = statuses!.pictureURLs![indexPath.row]
//        注意的是,我这里的测试的 应用 .row 和 .itew 的属性来加载没有区别
        return cell
    }

}

//要求的是 自定义的UIcollectionViewCell 的保存和加载微博的图片
class statusPictureViewCell: UICollectionViewCell {
    var imageURL: NSURL?{
        didSet{
        //调用sd 的框架来进行的实现方法
        iconView.sd_setImageWithURL(imageURL!)
        }
    }
    
    //MARK:-构造函数;
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    private func setupUI(){
        contentView.addSubview(iconView)
        iconView.ff_Fill(contentView)
    }
    //MARK:-懒加载控件;
    private lazy var iconView:UIImageView = UIImageView()

}